package com.example.wexcle.demos.web.config;

import java.util.ArrayList;
import java.util.List;

/**
 * 类似分页，将百多万数据分成10个list再把10 个list放到一个list,保证前面9张表数据一致，后一张表是剩余的数据
 */
public class ListPartitioner {
    public static <T> List<List<T>> partition(List<T> list, int size) {
        List<List<T>> partitionedList = new ArrayList<>();
        int partitionSize = (int) Math.ceil((double) list.size() / size);
        //Math.ceil(double a) 方法用于返回大于或等于参数的最小双精度浮点数，即向上取整
        for (int i = 0; i < list.size(); i += partitionSize) {
            partitionedList.add(list.subList(i, Math.min(i + partitionSize, list.size())));
           // list.subList(int fromIndex, int toIndex) 是 Java 中 List 接口的一个方法，用于返回列表中从 fromIndex（包含）到 toIndex（不包含）之间的部分视图
        }
        return partitionedList;
    }
}
//1000789/10 = 100078.9;    partitionSize->100079
//i = 0 ->i+partitionSize->i = 100079 ;Math.min(i + partitionSize, list.size())->Math.min(100079,1000789)=100079
//查询list.subList(0，100079）的数据
//i = 100080 ->100080+partitionSize->i = 200159;Math.min(i + partitionSize, list.size())->Math.min(200160,1000789)=200160
//第二次把集合list.subList(100079，200160）的数据
//                                  100080；
//                                 +100079
 //                                    ----------
//                                 =200159
